<template>
  <div class="ValidCode disabled-select" style="width: 100%;height: 100%;" @click="refreshCode">
    <span v-for="(item,index) in codeList" :key="index" :style="getStyle(item)">{{item.code}}</span>
  </div>
</template>

<script>
export default {
  name: "ValidCode",
  data() {
    return {
      length: 4,//验证码长度
      codeList: []
    }
  },
  mounted() {
    this.createdCode();
  },
  methods: {
    refreshCode() {
      this.createdCode();
    },
    createdCode() {
      let len = this.length,
          codeList = [],
          chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz0123456789',
          charsLen = chars.length;
      for (let i = 0; i < len; i++) {
        let rgb = [Math.round(Math.random() * 220), Math.round(Math.random() * 240), Math.round(Math.random() * 200)];
        codeList.push({
          code: chars.charAt(Math.floor(Math.random() * charsLen)),
          color: `rgb(${rgb})`,
          padding: `${Math.floor(Math.random() * 10)}px`,
          transition: `rotate(${Math.floor(Math.random() * 90) - Math.floor(Math.random() * 90)}deg)`
        });
      }
      this.codeList = codeList;

      const fullCode = codeList.map(item => item.code).join('');
      this.$emit('update:value', fullCode);
    },
    getStyle(data) {
      return `font-size: ${data.fontSize};color: ${data.color};padding: ${data.padding};transform: ${data.transition}`;
    }
  }
}
</script>

<style>
.ValidCode {
  display: flex;
  cursor: pointer;
  justify-content: center;
  align-items: center;
}
</style>